﻿using System;
using System.Collections.Generic;
using System.Linq;

// 订单类
public class Order
{
    public int OrderId { get; set; } // 订单ID
    public string Customer { get; set; } // 客户名
    public List<OrderDetails> OrderDetails { get; set; } = new List<OrderDetails>(); // 订单明细列表

    // 计算订单的总金额
    public decimal TotalAmount => OrderDetails.Sum(detail => detail.Price * detail.Quantity);

    // 重写Equals方法，确保订单不重复
    public override bool Equals(object obj)
    {
        return obj is Order order && OrderId == order.OrderId;
    }

    // 重写GetHashCode方法
    public override int GetHashCode()
    {
        return OrderId;
    }

    // 重写ToString方法，用于显示订单信息
    public override string ToString()
    {
        return $"OrderId: {OrderId}, Customer: {Customer}, TotalAmount: {TotalAmount}";
    }
}

// 订单明细类
public class OrderDetails
{
    public string ProductName { get; set; } // 商品名称
    public decimal Price { get; set; } // 商品价格
    public int Quantity { get; set; } // 商品数量

    // 重写Equals方法，确保订单明细不重复
    public override bool Equals(object obj)
    {
        return obj is OrderDetails details &&
               ProductName == details.ProductName;
    }

    // 重写GetHashCode方法
    public override int GetHashCode()
    {
        return HashCode.Combine(ProductName);
    }

    // 重写ToString方法，用于显示订单明细信息
    public override string ToString()
    {
        return $"ProductName: {ProductName}, Price: {Price}, Quantity: {Quantity}";
    }
}

// 订单服务类
public class OrderService
{
    private List<Order> orders = new List<Order>(); // 存储订单的列表

    // 添加订单
    public void AddOrder(Order order)
    {
        if (!orders.Contains(order))
        {
            orders.Add(order);
        }
        else
        {
            throw new Exception("Order already exists.");
        }
    }

    // 删除订单
    public void DeleteOrder(int orderId)
    {
        var order = orders.FirstOrDefault(o => o.OrderId == orderId);
        if (order != null)
        {
            orders.Remove(order);
        }
        else
        {
            throw new Exception("Order not found.");
        }
    }

    // 查询订单（示例：按客户查询）
    public IEnumerable<Order> QueryOrdersByCustomer(string customer)
    {
        return orders.Where(o => o.Customer == customer).OrderByDescending(o => o.TotalAmount);
    }

    // 对保存的订单进行排序（默认按订单号排序，支持自定义排序）
    public void SortOrders(Func<Order, object> keySelector)
    {
        orders = orders.OrderBy(keySelector).ToList();
    }
}
/********************************************d2    *********/
// 程序入口类
class Program
{
    static void Main(string[] args)
    {
        // 生成100个0\~1000间的整数，并使用LINQ进行操作
        int[] numbers = new int[100];
        Random rand = new Random();
        for (int i = 0; i < numbers.Length; i++)
        {
            numbers[i] = rand.Next(0, 1001);
        }

        var sortedNumbers = numbers.OrderByDescending(n => n); // 对数字进行降序排序
        var sum = sortedNumbers.Sum(); // 求和
        var average = sortedNumbers.Average(); // 求平均数

        Console.WriteLine("Sorted Numbers: " + string.Join(", ", sortedNumbers));
        Console.WriteLine($"Sum: {sum}, Average: {average}");
        
        // 注意：这里只展示了LINQ操作的示例，并没有演示OrderService类的使用。
        // 如果需要实际操作订单，需要创建OrderService的实例并调用其方法。
    }
}
